home *** CD-ROM | disk | FTP | other *** search
- UNIT PoetryU;
-
- INTERFACE
-
- VAR
- Vowels,
- Conson : SET OF CHAR;
-
- FUNCTION NumWords( S : STRING ) : INTEGER;
- FUNCTION GetWord( S : STRING; WhichWord : INTEGER ) : STRING;
- FUNCTION Word_Syll( S : STRING ) : INTEGER;
- FUNCTION Sent_Syll( S : STRING ) : INTEGER;
- FUNCTION UCase( S : STRING ) : STRING;
-
- IMPLEMENTATION
-
-
- FUNCTION UCase( S : STRING ) : STRING;
- VAR
- Count : INTEGER;
-
- Begin
- FOR Count := 1 TO Length( S ) DO
- S[ Count ] := UpCase( S[ Count ] );
-
- UCase := S;
- End;
-
- FUNCTION RightStr( S : STRING; Index : BYTE ) : STRING;
- Begin
- RightStr := Copy( S, Index, Length( S ) );
- End;
-
- { This function returns the number of words within a given string. }
- FUNCTION NumWords( S : STRING ) : INTEGER;
- VAR
- Words,
- Count : INTEGER;
-
- Begin
- Words := 0;
- Count := 0;
-
- S := UCase( S );
-
- WHILE Count <> Length( S ) DO
- Begin
- INC( Count );
-
- IF S[Count] IN ['A'..'Z'] THEN
- Begin
- INC( Words );
-
- WHILE (S[Count] IN ['A'..'Z', '''']) AND (Count < Length( S )) DO
- INC( Count );
- End;
- End;
-
- NumWords := Words;
- End;
-
- { This function will return a word (1st, 2nd, 3rd, etc) from a sentence.
- Note that it converts the word to uppercase. }
- FUNCTION GetWord( S : STRING; WhichWord : INTEGER ) : STRING;
- VAR
- WC,
- Count : INTEGER;
- Temp : STRING;
-
- Begin
- WC := 0;
- Count := 0;
- Temp := '';
-
- IF WhichWord > NumWords( S ) THEN
- Begin
- GetWord := '';
- Exit;
- End;
-
- S := UCase( S );
-
- WHILE Count < Length( S ) DO
- Begin
- INC( Count );
-
- IF S[Count] IN ['A'..'Z'] THEN
- Begin
- INC( WC );
-
- IF WC = WhichWord THEN
- WHILE (S[Count] IN ['A'..'Z']) AND (Count <= Length( S )) DO
- Begin
- Temp := Temp + S[Count];
- INC( Count );
- End
- ELSE
- WHILE (S[Count] IN ['A'..'Z']) AND (Count <= Length( S )) DO
- INC( Count );
- End;
- End;
-
- GetWord := Temp;
- End;
-
- { This function will return the number of syllables in a given word.
- It is in no way a fool-proof function, but will work for a lot of words. }
- FUNCTION Word_Syll( S : STRING ) : INTEGER;
- VAR
- Count,
- SylCount : INTEGER;
-
- Begin
- { No syllables! }
- SylCount := 0;
-
- S := UCase( S );
-
- { If it starts with a vowel, there is a good chance an extra syllable is in
- there. }
- IF (S[1] IN Vowels) AND (Length( S ) > 3) THEN
- SylCount := 1;
-
- IF (Pos( 'IO', S ) > 0) THEN
- INC( SylCount );
- IF (Pos( 'EO', S ) > 0) THEN
- INC( SylCount );
- IF (Pos( 'IA', S ) > 0) THEN
- INC( SylCount );
- IF (Pos( 'ISM', S ) > 0) THEN
- INC( SylCount );
- IF ((Pos( 'UA', S ) > 0) AND (Pos( 'QUA', S ) = 0)) THEN
- INC( SylCount );
- IF (Pos( 'TION', S ) OR (Pos( 'SION', S )) <> 0) THEN
- DEC( SylCount );
-
- FOR Count := 1 TO (Length( S ) - 1) DO
- IF (S[Count] IN Conson) AND (S[Count + 1] IN Vowels) THEN
- INC( SylCount );
-
- IF (S[Length( S )] = 'E') AND (Pos( 'BLE', RightStr( S, 3 )) = 0) AND
- (Pos( 'IE', RightStr( S, 2 )) = 0) AND
- (Pos( 'TLE', RightStr( S, 3 )) = 0) THEN
- DEC( SylCount );
-
- { A word must have at least 1 syllable!! }
- IF SylCount < 1 THEN
- SylCount := 1;
-
- Word_Syll := SylCount;
- End;
-
- { This function will count the number of syllables in a given sentence. }
- FUNCTION Sent_Syll( S : STRING ) : INTEGER;
- VAR
- Count,
- SylCount : INTEGER;
- Temp : STRING;
-
- Begin
- SylCount := 0;
-
- FOR Count := 1 TO NumWords( S ) DO
- INC( SylCount, Word_Syll( GetWord( S, Count ) ) );
-
- Sent_Syll := SylCount;
- End;
-
- PROCEDURE InitVowels;
- Begin
- Vowels := ['A', 'E', 'I', 'O', 'U', 'Y'];
- End;
-
- PROCEDURE InitConson;
- VAR
- Ch : CHAR;
-
- Begin
- Conson := [];
-
- FOR Ch := 'A' TO 'Z' DO
- IF NOT (Ch IN Vowels) THEN
- Conson := Conson + [ Ch ];
- End;
-
- BEGIN
- InitVowels;
- InitConson;
- END.
-
- { ------------------------- DEMO ----------------------- }
-
-
- USES Crt, PoetryU;
-
- CONST
- TEST = 'These are a few interesting functions, man.';
- {TEST = 'antidisestablishmentarianism';}
-
- VAR
- AWord : STRING;
-
- BEGIN
- ClrScr;
-
- AWord := GetWord( TEST, NumWords( TEST ) );
-
- WriteLn( 'The last word is : ', AWord );
- WriteLn( '# of syllables : ', Word_Syll( AWord ) );
- WriteLn( 'Total # of words : ', NumWords( TEST ) );
- WriteLn( 'Total syllables : ', Sent_Syll( TEST ) );
- END.